#include<iostream>
#include<cstdio>
using namespace std;
const int maxn = 10e5+5;
int st[maxn][20];
int n,m;

inline void read(int &x){
    char c;int flag=0;
    while(!isdigit(c=getchar()))
      if(c=='-') flag=1;
    x=c-'0';
    while(isdigit(c=getchar()))
      x=x*10+c-'0';
    if(flag) x=-x;
}

inline void init(){
    for(register int j=1;(1<<j)<=n;j++){
        for(register int i=1;i+(1<<j)<=n+1;i++){
            st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
        }
    }
}

int query(int l,int r){
    int k=0;
    while((1<<k)<=(r-l+1))k++;
    k--;
    return max(st[l][k],st[r-(1<<k)+1][k]);
}

int main(){
    read(n);
    read(m);
    for(int i=1;i<=n;i++)read(st[i][0]);
    init();
    int a,b;
    for(int i=1;i<=m;i++){
        read(a);read(b);
        printf("%d\n",query(a,b));
    }
    return 0;
} 
